//
//  SDMainViewController.swift
//  shudong
//
//  Created by luojie on 2018/3/4.
//  Copyright © 2018年 luojie. All rights reserved.
//

import UIKit

class SDMainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupChildControllers()
        setupComposeButton()
        // Do any additional setup after loading the view.
        
    }
    /**
     portrait    : 竖屏，肖像。
     landscape   : 横屏，风景画
     
     - 使用代码控制设备的方向，好处，可以在在需要横屏的时候，单独处理！
     - 设置支持的方向之后，当前的控制器及子控制器都会遵守这个方向！
     - 如果播放视频，通常是通过 modal 展现的！
     */
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
    
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
        return .portrait
    }
    

    //监听方法
    //撰写添加按钮
    //FIXME：没有实现
    //private
    //
    func composeStatus(){
      print("监听")
        
    }
    //私有控件
    public lazy var composeButton:UIButton = UIButton.cz_imageButton(
        "tabbar_compose_icon_add", backgroundImageName: "tabbar_compose_button")
}
// extension 类似于 OC 中的 分类，在 Swift 中还可以用来切分代码块
// 可以把相近功能的函数，放在一个 extension 中
// 便于代码维护
// 注意：和 OC 的分类一样，extension 中不能定义属性
// MARK: - 设置界面
extension SDMainViewController{
    //设置撰写按钮
    public func setupComposeButton(){
      tabBar.addSubview(composeButton)
      //计算按钮的宽度
      let count = CGFloat(childViewControllers.count)
      // 宽度是w，减1是为了盖住容错点
      let w = tabBar.bounds.width/count - 1
      //CGReactInset 正数向内缩进，负数向外扩展
      composeButton.frame = tabBar.bounds.insetBy(dx: 2*w, dy: 0)
        
        composeButton.addTarget(self, action: #selector(composeStatus), for: .touchUpInside)
        
    }
     /// 设置所有子控制器
    public func setupChildControllers(){
        let array=[
              ["clsName":"SDHomeViewController","title":"首页","imageName":"home"],
              ["clsName":"SDMessageViewController","title":"消息","imageName":"message_center"],
              ["clsName":"UIViewController"],
              ["clsName":"SDDiscoverViewController","title":"发现","imageName":"discover"],
              ["clsName":"SDProfileViewController","title":"个人中心","imageName":"profile"]
            ]
        var arrayM=[UIViewController]()
        for dict in array {
            arrayM.append(controller(dict: dict as [String : AnyObject]))
        }
        
        // 设置 tabBar 的子控制器  (name: String) -> String in "Hello, \(name)"
        viewControllers = arrayM
    }
    /// 使用字典创建一个子控制器 dict
    ///
    /// - parameter dict: 信息字典[clsName, title, imageName, visitorInfo]
    ///
    /// - returns: 子控制器
    public func controller(dict: [String: AnyObject]) -> UIViewController {
        // 1. 取得字典内容
        guard let clsName = dict["clsName"],
            let title = dict["title"],
            let imageName = dict["imageName"],
            let cls = NSClassFromString(Bundle.main.namespace+"."+(clsName as! String)) as?UIViewController.Type
            
            else {
                return UIViewController()
       }
        //2，创建试图，
        // 1》 将clsName转换为cls
        let vc = cls.init()
        
        vc.title = title as! String
        //设置头像
        vc.tabBarItem.image = UIImage(named:"tabbar_"+(imageName as! String))
        vc.tabBarItem.selectedImage = UIImage(named:"tabbar_"+(imageName as! String)+"_selected")?.withRenderingMode(.alwaysOriginal)
        //设置tabbar的标题字体颜色和大小
        vc.tabBarItem.setTitleTextAttributes(
            [NSForegroundColorAttributeName:UIColor.orange],
            for: .highlighted)
        vc.tabBarItem.setTitleTextAttributes(
            [NSFontAttributeName:UIFont.systemFont(ofSize: 12)],
            for: UIControlState(rawValue: 0))
        
        let nav = SDNavigationController(rootViewController:vc)
        
        return nav
        
    }
}
